﻿//========================================================= 
/**@file FormatFollower.h
 * @brief 通过boost::format输出日志
 * 
 * @date 2018-06-18   11:35:44
 * @author Zhyioo 
 * @version 1.0
 */ 
//--------------------------------------------------------- 
#ifndef _LIBZHOUYB_FORMATFOLLOWER_H_
#define _LIBZHOUYB_FORMATFOLLOWER_H_
//--------------------------------------------------------- 
#include "../ILogCat.h"

#include <boost/format.hpp>
//--------------------------------------------------------- 
namespace zhou_yb {
namespace extension {
namespace logcat {
//--------------------------------------------------------- 
/// 使用boost::format % 的方式输出日志
class FormatFollower : public LogCatFollower
{
protected:
    boost::format _fmt;

    void _copy(FormatFollower& obj)
    {
        LogCatFollower::_copy(obj);
        _fmt.swap(obj._fmt);
    }
public:
    LogCatFollowerConstructor(FormatFollower)

    virtual ~FormatFollower()
    {
        if(IsEnable())
        {
            Append(_fmt.str());
        }
    }

    FormatFollower& Format(const char* fmt)
    {
        if(IsEnable())
        {
            _fmt = boost::format(fmt);
        }
        return (*this);
    }
    template<class T>
    FormatFollower& operator %(const T& val)
    {
        if(IsEnable())
        {
            _fmt % val;
        }
        return (*this);
    }
};
//--------------------------------------------------------- 
} // namespace logcat
} // namespace extension
} // namespace zhou_yb
//--------------------------------------------------------- 
#endif // _LIBZHOUYB_FORMATFOLLOWER_H_
//========================================================= 